package subframes 
{
	import flash.display.Bitmap;
	import flash.display.DisplayObject;
	import flash.display.InteractiveObject;
	import flash.display.SimpleButton;
	import flash.display.Sprite;
	import flash.text.*;
	import subframes.visual.buttons.BtnMain;
	import flash.events.Event;
	import flash.events.MouseEvent;
	
	import tools.GraphicTools;
	
	/**
	 * Класс, отображающий интерфейс.
	 */
	public class FrMainInterface extends BaseFrame 
	{
		/* События кликов по кнопкам */
		public static const CLICK_SPACEGAME:String = "clickStaceGame";
		public static const CLICK_HANGAR:String = "clickHangar";
		public static const CLICK_MARKET:String = "clickMarket";
		public static const CLICK_PVP:String = "clickPvp";
		public static const CLICK_ACHIEVEMENTS:String = "clickAchievements";
		
		/* Инфо */
		private var fmtInfo:TextFormat;
		private var txtUserName:TextField;
		private var photo:DisplayObject;
		
		/* Кнопки */
		private var btnSpaceGame:BtnMain;
		private var btnPvp:BtnMain;
		private var btnMarket:BtnMain;
		private var btnHangar:BtnMain;
		private var btnAchievements:BtnMain;
		
		/* Внешний приёмник игровых событий интерфейса */
		protected var eventListener:Function;
		
		/* parentFrame - родитель интерфейса 
		 * listener - внешний приёмник событий */
		public function FrMainInterface(parentFrame:BaseFrame, listener:Function) 
		{
			super(parentFrame);
			eventListener = listener;
		}
			
		/* Метод мейнфрейма, формирующий игровой интерфейс
		 * Панели, кнопки и тд всё тут 
		 * Исполняется после загрузки контента */
		public function CreateInterface():void
		{
			fmtInfo = new TextFormat("_sans", 20, 0xFF0000, true);
			
			txtUserName = new TextField();
			addChild(txtUserName);
			txtUserName.defaultTextFormat = fmtInfo;
			txtUserName.x = 10;
			txtUserName.y = 10;
			//txtUserName.width = 200;
			txtUserName.text = mainFrame.VKLoadedData.firstName + " " + mainFrame.VKLoadedData.lastName;
			txtUserName.autoSize = TextFieldAutoSize.LEFT;
			txtUserName.selectable = false;
			
			photo = GraphicTools.duplicateImageAsSprite(mainFrame.VKLoadedData.photoMedium) as DisplayObject;
			addChild(photo);
			photo.x = 10;
			photo.y = 40;
			
			/***** Кнопки *****/
			btnSpaceGame = new BtnMain(this);
			addChild(btnSpaceGame);
			btnSpaceGame.x = 200;
			btnSpaceGame.y = 40;
			
			btnPvp = new BtnMain(this);
			addChild(btnPvp);
			btnPvp.x = 300;
			btnPvp.y = 40;
			
			btnMarket = new BtnMain(this);
			addChild(btnMarket);
			btnMarket.x = 400;
			btnMarket.y = 40;
			
			btnHangar = new BtnMain(this);
			addChild(btnHangar);
			btnHangar.x = 500;
			btnHangar.y = 40;
			
			btnAchievements = new BtnMain(this);
			addChild(btnAchievements);
			btnAchievements.x = 600;
			btnAchievements.y = 40;
			
			/* Назначим приёмник события Клика мышкой */
			addEventListener(MouseEvent.CLICK, btnClickListener);
			
			/* Привязываем внешний приёмник "игровых" событий интерфейса */
			if (eventListener != null)
				AttachListeners(eventListener, true);
		}
		
		/* Подцепление\Отцепление внешнего приёмника событий интерфейса */
		public function AttachListeners(listener:Function, val:Boolean):void
		{
			if (listener == null)	return;
			/* Взависимости от флага, определяем указатель на метод */
			var curFunc:Function = val?addEventListener:removeEventListener;
						
			curFunc(FrMainInterface.CLICK_ACHIEVEMENTS, eventListener);
			curFunc(FrMainInterface.CLICK_HANGAR, eventListener);
			curFunc(FrMainInterface.CLICK_MARKET, eventListener);
			curFunc(FrMainInterface.CLICK_PVP, eventListener);
			curFunc(FrMainInterface.CLICK_SPACEGAME, eventListener);
		}
		
		/* Очистка интерфейса от элементов */
		public function ClearInterface():void
		{			
			removeChild(txtUserName);
			removeChild(photo);
			removeChild(btnSpaceGame);
			removeChild(btnPvp);
			removeChild(btnMarket);
			removeChild(btnHangar);
			removeChild(btnAchievements);
			
			fmtInfo = null;
			photo = null;
			btnSpaceGame = null;
			btnPvp = null;
			btnMarket = null;
			btnHangar = null;
			btnAchievements = null;
						
			removeEventListener(MouseEvent.CLICK, btnClickListener);
			/* Отвязываем внешний приёмник "игровых" событий интерфейса */
			AttachListeners(eventListener, false);
		}
		
		/* Обработчик нажатий на кнопки интерфейса */
		private function btnClickListener(e:MouseEvent):void
		{
			/* Все потомки InteractiveObject(включая кнопки) могут быть 
			 * получателями события MouseEvent*/
			var tarBtn:InteractiveObject = e.target as InteractiveObject;
						
			/* Выбрасываем событие интерфейса взависимости от нажатой кнопки (события клика) */
			switch(tarBtn)
			{
				case btnSpaceGame:
				dispatchEvent(new Event(FrMainInterface.CLICK_SPACEGAME));
				break;
				case btnPvp:
				dispatchEvent(new Event(FrMainInterface.CLICK_PVP));
				break;
				case btnMarket:
				dispatchEvent(new Event(FrMainInterface.CLICK_MARKET));
				break;
				case btnHangar:
				dispatchEvent(new Event(FrMainInterface.CLICK_HANGAR));
				break;
				case btnAchievements:
				dispatchEvent(new Event(FrMainInterface.CLICK_ACHIEVEMENTS));
				break;
			}
			
			/* Поглощаем событие клика, чтобы оно не попало к родителю интерфейса */
			e.stopImmediatePropagation();
		}
			
	}

}